#ifndef PID_H
#define PID_H

#include <stdint.h>

// PID控制器结构体
typedef struct {
    // 基本参数
    float kp;          // 比例系数
    float ki;          // 积分系数
    float kd;          // 微分系数
    
    // 限制条件
    float output_limit_min;  // 输出最小值限制
    float output_limit_max;  // 输出最大值限制
    float integral_limit;    // 积分限幅（防止积分饱和）
    
    // 内部变量（位置式）
    float setpoint;     // 目标值
    float last_error;   // 上一次误差
    float last_last_error; // 上上次误差（用于二阶差分，可选）
    float integral;     // 积分项累计
    float output;       // 输出值
    
    // 内部变量（增量式）
    float increment;    // 增量值
} PID_Controller;

void pid_set_setpoint(PID_Controller *pid, float setpoint);
void pid_set_params(PID_Controller *pid, float kp, float ki, float kd);
float pid_calculate_position(PID_Controller *pid, float current_value, float dt);
float pid_calculate_increment(PID_Controller *pid, float current_value, float dt);
void pid_reset(PID_Controller *pid);
void pid_init(PID_Controller *pid, 
              float kp, float ki, float kd,
              float output_min, float output_max,
              float integral_limit);

#endif
